package com.example.hanfu_bk.service;

import com.example.hanfu_bk.mapper.UserMapper;
import com.example.hanfu_bk.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

    public User login(String phone, String password) {
        User user = userMapper.selectByPhone(phone);
        if (user != null && user.getPassword().equals(password)) {
            user.setIsLogin(1);
            userMapper.updateLoginStatus(user);
            return user;
        }
        return null;
    }

    public int register(User user) {
        User existUser = userMapper.selectByPhone(user.getPhone());
        if (existUser != null) {
            return -1;
        }

        if (user.getFavoriteThing() == null) {
            user.setFavoriteThing("");
        }
        if (user.getAvatar() == null || user.getAvatar().isEmpty()) {
            user.setAvatar("/static/logo.png");
        }
        if (user.getNickname() == null || user.getNickname().isEmpty()) {
            user.setNickname("汉服爱好者_" + user.getPhone().substring(7));
        }

        return userMapper.register(user);
    }


    public User getUserInfo(Integer id) {
        return userMapper.selectById(id);
    }

    public int logout(Integer id) {
        User user = new User();
        user.setId(id);
        user.setIsLogin(0);
        return userMapper.updateLoginStatus(user);
    }

    public int updateUserInfo(User user) {
        return userMapper.updateUserInfo(user);
    }

    public int resetPassword(String phone, String favoriteThing, String newPassword) {
        // 1. 查询用户是否存在
        User existUser = userMapper.selectByPhone(phone);
        if (existUser == null) {
            return -1; // 手机号未注册
        }

        // 2. 验证密保答案
        if (!favoriteThing.equals(existUser.getFavoriteThing())) {
            return -2; // 密保答案错误
        }

        // 3. 设置新密码并更新
        existUser.setPassword(newPassword);
        return userMapper.updatePassword(existUser);
    }

    public int updatePassword(Integer userId, String oldPassword, String newPassword) {
        // 1. 查询用户
        User user = userMapper.selectById(userId);
        if (user == null) {
            return -2; // 用户不存在
        }

        // 2. 验证旧密码（明文直接比较）
        if (!user.getPassword().equals(oldPassword)) {
            return -1; // 原密码错误
        }

        // 3. 直接设置新密码（不加密）
        user.setPassword(newPassword);
        return userMapper.updatePasswordById(user);
    }

    /**
     * 修改密保答案（未加密版本）
     */
    public int updateSecurityAnswer(Integer userId, String password, String newSecurityAnswer) {
        // 1. 查询用户
        User user = userMapper.selectById(userId);
        if (user == null) {
            return -2; // 用户不存在
        }

        // 2. 验证密码（明文直接比较）
        if (!user.getPassword().equals(password)) {
            return -1; // 密码错误
        }

        // 3. 更新密保答案
        user.setFavoriteThing(newSecurityAnswer); // 假设用favoriteThing字段存储密保答案
        return userMapper.updateSecurityAnswer(user);
    }

    /**
     * 注销账号（未加密版本，物理删除）
     */
    @Transactional
    public int deleteAccount(Integer userId, String password) {
        // 1. 查询用户
        User user = userMapper.selectById(userId);
        if (user == null) {
            return -2; // 用户不存在
        }

        // 2. 验证密码（明文直接比较）
        if (!user.getPassword().equals(password)) {
            return -1; // 密码错误
        }

        // 3. 物理删除用户
        return userMapper.deleteById(userId);
    }
}
